package paging

import (
	"fmt"

	"github.com/molio/practice/ds/link"
	"github.com/molio/practice/ds/utils"
)

// 模拟翻页过程，使用双链表实现

type Page struct {
	PageNum int // 总页数
	PageSeq *link.DoubleLinkedList
}

func initPage(num int) *Page {
	dll := link.NewDoubleLinkedList()
	dll.CreateDoubleLinkedListWithNumSeq(num)
	return &Page{PageNum: num, PageSeq: dll}
}

func (p *Page) flipOver() {
	fmt.Printf("本菜单总共有%d页\n", p.PageNum)
	cNode := p.PageSeq.Head
	for cNode.Next != p.PageSeq.Head {
		fmt.Println("请输入指令: p上一页, n下一页, 回车继续，#结束")
		command := utils.ReadInputString()
		switch command {
		case "":
			fmt.Println("退出查询翻页操作")
			return
		case "p":
			if cNode.Prev == nil {
				fmt.Println("当前页为首页，不能再往前翻页了")
			} else {
				cNode = cNode.Prev
				fmt.Printf("当前页为： %d\n", cNode.Data)
			}
		case "n":
			if cNode.Next == nil {
				fmt.Println("当前页为最后1页，不能再往后翻页了")
			} else {
				cNode = cNode.Next
				fmt.Printf("当前页为： %d\n", cNode.Data)
			}
		default:
			fmt.Println("不支持的指令")
		}
	}
}

func PageRun() {
	page := initPage(10)
	page.flipOver()
}
